package chapter02;

import java.util.Scanner;

public class User {
    public static String[] arr1 = new String[3];
    public static String[] arr2 = new String[3];
    static int index = 0;

    public static void main(String[] args) {
        arr1[0] = "heima";
        arr2[0] = "123456";
        while (true) {
            System.out.println("请选择功能: ");
            String str = getInput("功能选择"); // 修改：使用自定义的 getInput 方法获取输入
            if (str.equals("1")) {
                login();
            } else if (str.equals("2")) {
                register();
            } else if (str.equals("3")) {
                show();
                break;
            } else if (str.equals("0")) {
                System.exit(0);
            } else {
                System.out.println("输入错误");
            }
        }
    }

    private static String getInput(String prompt) { // 修改：将获取输入的代码封装到单独的方法中
        Scanner scan = new Scanner(System.in);
        System.out.print(prompt + ": ");
        return scan.next();
    }

    public static void login() {
        while (true) { // 修改：使用循环处理登录失败的情况
            String username = getInput("用户名"); // 修改：使用自定义的 getInput 方法获取输入
            String password = getInput("密码"); // 修改：使用自定义的 getInput 方法获取输入

            if (validateCredentials(username, password)) { // 修改：添加验证凭据的方法
                System.out.println("登陆成功! ");
                return;
            } else {
                System.out.println("登陆失败,请重新输入!");
            }
        }
    }

    private static boolean validateCredentials(String username, String password) { // 修改：将验证凭据的代码封装到单独的方法中
        for (int i = 0; i < arr2.length; i++) {
            if (username.equals(arr1[i]) && password.equals(arr2[i])) {
                return true;
            }
        }
        return false;
    }

    public static void register() {
        String username = getInput("用户名"); // 修改：使用自定义的 getInput 方法获取输入
        String password = getInput("密码"); // 修改：使用自定义的 getInput 方法获取输入

        if (isUniqueUsername(username)) { // 修改：添加检查用户名唯一性的方法
            index++;
            if (index < arr1.length) {
                arr1[index] = username;
                arr2[index] = password;
                System.out.println("注册成功!");
            } else {
                addArrays(); // 修改：添加扩展数组的方法
                arr1[index] = username;
                arr2[index] = password;
                System.out.println("注册成功!");
            }
        } else {
            System.out.println("该用户已存在");
        }
    }

    private static boolean isUniqueUsername(String username) { // 修改：将检查用户名唯一性的代码封装到单独的方法中
        for (String existingUsername : arr1) {
            if (existingUsername.equals(username)) {
                return false;
            }
        }
        return true;
    }

    private static void addArrays() { // 修改：将扩展数组的代码封装到单独的方法中
        String[] newArray1 = new String[arr1.length + 3];
        String[] newArray2 = new String[arr1.length + 3];
        System.arraycopy(arr1, 0, newArray1, 0, arr1.length);
        System.arraycopy(arr2, 0, newArray2, 0, arr1.length);
        arr1 = newArray1;
        arr2 = newArray2;
        show();
    }

    public static void show() {
        for (int i = 0; i < arr1.length; i++) {
            if (arr1[i]!= null) {
                System.out.println("用户名: " + arr1[i] + "," + "密码: " + arr2[i] + "\n");
            }
        }
    }
}